When upgrading a deployed software system in a customer environment to a new version complex data migrations are common and should be supported for existing customer data. These migrations can become very complex if the underlying schema of the database changes as part of the upgrade to the new software version. Third-party database versioning tools such as Liquibase (which may also be referred to as database migration or database refactoring tools) already have the ability to call scripting and executable code, such as Java code, to manipulate data. However, such solutions require that custom code be written for each migration and this custom code often duplicates existing business logic. Implementation of such tools can therefore be technically complex, time consuming, and involve risk.